package table

import (
	"strings"

	"github.com/spf13/cobra"
)

type TableArg struct {
	Name   string `vd:"required"` // 表名 domain.table
	Domain string // 所属域
	Cfg    string // 配置文件
}

func (t TableArg) GetName() string {
	if strings.Contains(t.Name, ".") {
		return strings.Split(t.Name, ".")[1]
	} else {
		return t.Name
	}
}

func (t TableArg) GetDomain() string {
	if t.Domain != "" {
		return t.Domain
	} else if strings.Contains(t.Name, ".") {
		return strings.Split(t.Name, ".")[0]
	} else {
		return ""
	}
}

func (t *TableArg) Parse(cmd *cobra.Command) {
	cmd.Flags().StringVarP(&t.Cfg, "config", "f", "etc/config.yaml", "配置文件")
}

type TableCreateArg struct {
	TableArg
	Comment string // 表注释
}

func (t *TableCreateArg) Parse(cmd *cobra.Command) error {
	cmd.Flags().StringVarP(&t.Cfg, "config", "f", "etc/config.yaml", "配置文件")
	cmd.Flags().StringVarP(&t.Name, "name", "n", "", "表名")
	cmd.Flags().StringVarP(&t.Domain, "domain", "d", "", "所属域")
	cmd.Flags().StringVarP(&t.Comment, "comment", "c", "", "表注释")
	return nil
}

type TableDeleteArg struct {
	TableArg
}

func (t *TableDeleteArg) Parse(cmd *cobra.Command) error {
	cmd.Flags().StringVarP(&t.Cfg, "config", "f", "etc/config.yaml", "配置文件")
	cmd.Flags().StringVarP(&t.Name, "name", "n", "", "表名")
	cmd.Flags().StringVarP(&t.Domain, "domain", "d", "", "所属域")
	return nil
}

type TableListArg struct {
	TableArg
	Format string // 输出格式 (json/table)
}

func (t *TableListArg) Parse(cmd *cobra.Command) error {
	cmd.Flags().StringVarP(&t.Cfg, "config", "f", "etc/config.yaml", "配置文件")
	cmd.Flags().StringVarP(&t.Domain, "domain", "d", "", "所属域")
	cmd.Flags().StringVarP(&t.Name, "name", "n", "", "表名, 模糊匹配")
	cmd.Flags().StringVarP(&t.Format, "format", "o", "table", "输出格式化, [json/table]")
	return nil
}

type FieldArg struct {
	TableArg
}

func (t *FieldArg) Parse(cmd *cobra.Command) {
	cmd.Flags().StringVarP(&t.Cfg, "config", "f", "etc/config.yaml", "配置文件")
}

type TableImportArg struct {
	TableArg
}

func (t *TableImportArg) Parse(cmd *cobra.Command) error {
	cmd.Flags().StringVarP(&t.Cfg, "config", "f", "etc/config.yaml", "配置文件")
	cmd.Flags().StringVarP(&t.Name, "table", "t", "", "表名")
	cmd.Flags().StringVarP(&t.Domain, "schema", "s", "", "库名")
	return nil
}

type TableGenArg struct {
	TableArg

	Modules []string
}

func (t *TableGenArg) Parse(cmd *cobra.Command) error {
	cmd.Flags().StringVarP(&t.Cfg, "config", "f", "etc/config.yaml", "配置文件")
	cmd.Flags().StringVarP(&t.Name, "name", "n", "", "表名")
	cmd.Flags().StringVarP(&t.Domain, "domain", "d", "", "所属域")
	cmd.Flags().StringSliceVarP(&t.Modules, "modules", "m", []string{}, "模块名")
	return nil
}
